/**
 * Dart 类与对象 - 抽象类
 * 1. 抽象类是用abstract关键字修饰的类
 * 2. 抽象类的作用充当普通类的模板,约定一些必要的属性和方法
 * 3. 抽象方法是指没有方法体的方法
 *    3.1 抽象类中一般都有抽象方法，也可以没有抽象方法
 *    3.2 普通类中， 不能有抽象方法
 * 4. 抽象类不能被实例化(不能被new)
 * 5. 抽象类可以被普通继承(extents)
 *    5.1 如果普通类继承抽象类，必须实现抽象类所有的抽象方法
 * 6. 抽象类还可以充当接口被实现(implements)
 *    6.1 如果把抽象类当作接口实现的话，普通类必须得实现抽象类定义的所有方法和属性
 */

abstract class Phone {
  abstract String name;
  void processor();
  void camera();
}

class Xiaomi extends Phone {
  @override
  String name = "小米";
  @override
  void processor() {
    print('CPU:晓龙888');
  }

  @override
  void camera() {
    print('camera:三星');
  }
}

class Haiwei extends Phone {
  @override
  String name = "Haiwei";
  @override
  void processor() {
    print('CPU: 麒麟88');
  }

  @override
  void camera() {
    print('camera AOS');
  }
}

void main (){
  Xiaomi xm = Xiaomi();
  xm.camera();
  xm.processor();
  Haiwei hw = Haiwei();
  hw.camera();
  hw.processor();
}